import threading
import os
import random
import time

"""
多线程的设计: 
    import threading
    多线程相比多进程的区别:
        多线程更加轻量化,使得io处理更加迅速
        
    # 面向对象的设计模式
        继承Thread类,重写run()方法
        设置守护进程,thread.setDaemon(True)
    
    # lock模块存在的问题
    上了几次锁就要解锁几次,就很不方便
    于是出现了rLock --- 一次解除所有锁
            
        
"""
# 一共有5 张票
tickets = 5
# 卖票处理
def sale(rlock):
    global tickets #使用全局变量
    if rlock.acquire():
        if tickets>0:
            time.sleep(1)
            tickets-=1
            print('{}卖票  剩余票{}'.format(threading.current_thread().name,tickets))
        else:
            print('{} 没票了'.format(threading.current_thread().name))
    rlock.release() # 释放锁

def main():
    rlock = threading.RLock()
    ths = [threading.Thread(target=sale,args=(rlock,),name='[{}] 售票处'.format(item)) for item in range(10)]
    for th in ths:
        th.start()
    for th in ths:
        th.join()

if __name__ == '__main__':
    main()